package com.gexin.common.xapp;

import java.util.HashMap;
import java.util.Map;

import com.jfinal.wxaapp.WxaConfig;
import com.jfinal.wxaapp.msg.IMsgParser;
import com.jfinal.wxaapp.msg.JsonMsgParser;
import com.jfinal.wxaapp.msg.XmlMsgParser;

/**
 * 小程序配置工具
 * @author L.cm
 *
 */
public class WxaConfigKit {
	//private static WxaConfig wxaConfig;
	private static Map<String, WxaConfig> app_map = new HashMap<String, WxaConfig>();

	private static final ThreadLocal<String> tl = new ThreadLocal<String>();

	public static void setThreadLocalAppid(String appid) {
		com.jfinal.wxaapp.WxaConfigKit.setWxaConfig(app_map.get(appid));
		tl.set(appid);
	}

	public static void removeThreadLocalWuYeId() {
		tl.remove();
	}

	public static void put(WxaConfig config) {
		app_map.put(config.getAppId(), config);
	}

	/**
	 * 小程序消息解析
	 */
	private static IMsgParser msgParser = new XmlMsgParser();

	/**
	 * 获取小程序消息解析器
	 * @return {IMsgParser}
	 */
	public static IMsgParser getMsgParser() {
		return msgParser;
	}

	/**
	 * 设置小程序消息解析器
	 */
	public static void useJsonMsgParser() {
		WxaConfigKit.msgParser = new JsonMsgParser();
	}

	// 开发模式将输出消息交互 xml、json 到控制台
	private static boolean devMode = false;

	public static void setDevMode(boolean devMode) {
		WxaConfigKit.devMode = devMode;
	}

	public static boolean isDevMode() {
		return devMode;
	}

//	public static void setWxaConfig(WxaConfig wxaConfig) {
//		WxaConfigKit.wxaConfig = wxaConfig;
//	}

	public static WxaConfig getWxaConfig() {
		String appid = tl.get();
		if (appid == null) {
			throw new IllegalStateException("需要事先使用 WxaConfigKit.setThreadLocalAppid(appid) 方法");
		}
		return app_map.get(appid);
	}
}
